import json
'''
#一、定义一个学生Student类。有下面的类属性：
#1 姓名 name
#2 年龄 age
#3 成绩 score（语文，数学，英语) [每课成绩的类型为整数]
#类方法：
# 1 获取学生的姓名：get_name() 返回类型:str
#2 获取学生的年龄：get_age() 返回类型:int
#3 返回3门科目中最高的分数。get_course() 返回类型:int
#4 将每个实例学生对象写进txt文件里，要持久保存
#举例：{"姓名":"a","年龄":29,"成绩":{"语文":99,"数学":100,"英语":85}
#5 获取所有学生的信息
#写好类以后，可以定义2个同学测试下:
#zm = Student('zhangming',20,[69,88,100])
class Student():
    def __init__(self,name,age,score):
        self.name = name
        self.age = age
        self.score = score
    def get_name(self):
        return str(self.name)
    def get_age(self):
        return int(self.age)
    def get_course(self):
        return max(self.score)
    def save_(self, file_name):
        with open('stu1.txt', 'a',encoding='uft-8') as f:
           f.write(f'姓名: {self.name}, 年龄: {self.age}, 成绩: {self.score}\n')
stu1 = Student('zhangming',20,[69,88,100])
stu2 = Student('lyh',20,[100,100,100])
print(stu1.name)
print(stu2.age)
print(stu1.score)
print(stu1.get_course())
print(stu1.__dict__)
stu1.save_('stu1.txt')
stu2.save_('stu1.txt')
'''
#二、定义一个字典类：dictclass。完成下面的功能：
#1 删除某个key
#2 判断某个键是否在字典里，如果在返回键对应的值，不存在则返回"not found"
#3 返回键组成的列表：返回类型;(list)
#4 合并字典，并且返回合并后字典的values组成的列表。返回类型:(list)
'''    
class Dictclass():
    def __init__(self):
        self.dict = {}
    def del_key(self,key):
        if key in self.dict:
            del self.dict[key]
    def find_key(self,key):
        if key in self.dict:
            return True
        else:
            return 'not found'
    def relist(self):
        return list(self.dict.keys())
    def merge_values(self,dicts):
        self.dict.update(dicts)
        return list(self.dict.values())
'''
#四、定义一个列表的操作类：Listinfo
#包括的方法:
#1 列表元素添加: add_key(keyname) [keyname:字符串或者整数类型]
#2 列表元素取值：get_key(num) [num:整数类型]
#3 列表合并：update_list(list) [list:列表类型]
#4 删除并且返回最后一个元素：del_key()
'''  
class Listinfo():
    def __init__(self):
        self.list = []
    def add_key(self,keyname):
        self.list.append(keyname)
    def get_key(self,num):
        if num > len(self.list):
            return False
        else:
            return self.list[num]
    def update_list(self,list):
        self.list += list
    def del_key(self):
        if len(self.list) > 0:
            return self.list.pop()
        else:
            return "empty"

list1 = Listinfo()
list1.add_key('1')
list1.add_key('2')
list1.add_key('3')
list1.add_key('4')

print(list1.get_key(3))

'''

''' 
# 五、做一个学生点名系统，系统里支持：存入学生、更改学生、删除学生、点到学生姓名方法
#存入学生（姓名、年龄、家庭地址、手机号）： 存入成功后，提示xxx存入成功
#更改学生（姓名、年龄、家庭地址、手机号）：可以修改学生内容的任意一个字段
#删除学生：删除的学生将不在展示
#展示全部学生：可以看到全部的学生姓名
class Student():
    def __init__(self,name,age,address,phone):
        self.name = name
        self.age = age
        self.address = address
        self.phone = phone
        self.students = {}
    def add_sudent(self,name,age,address,phone):
        if name in self.students:
            print(f"学生 {name} 已存在")
        else:
            self.students[name] = Student(name,age,address,phone)
            print(f"{name} 存入成功！")
    def update_student(self, name, age=None, address=None, phone=None):
        if name in self.students:
            if age is not None:
                self.students[name].age = age
            if address is not None:
                self.students[name].address = address
            if phone is not None:
                self.students[name].phone = phone
            print(f"学生 {name} 更新成功")
        else:
            print(f"学生 {name} 不存在")
    def delete_student(self, name):
        if name in self.students:
            del self.students[name]
            print(f"学生 {name} 已删除。")
        else:
            print(f"学生 {name} 不存在，无法删除。")
    def showstudents(self):  
        if len(self.students) == 0:  
            print("当前没有学生信息。")  
        else:  
            for name in self.students.items():  
                print(f"姓名：{students.name}, 年龄：{students.age}, 家庭地址：{students.address}, 手机号：{students.phone}")

'''
#六、点餐管理系统
#1》、餐馆可以新增菜品、下架菜品、修改菜品
#2》、每个菜品，都有对应的库存，所有菜品的库存均为999，每出一道菜，库存-1
#菜品有对应的价格，餐厅老板定义价格每道菜不允许超过15元，没有小数单位，均为整数
#3》、餐馆后台有点赞系统，能够收集客户对菜品的喜好，0~5分
#4》、有菜品评分提报功能，对平均分数（菜品总分/打分人数）低于3分的菜品进行强制下架；
class Diancai:
    def __init__(self, name, price, stock=999):
        self.name = name
        self.price = price
        self.stock = stock
        self.dish = {}
    def serve(self):
        if self.stock > 0 :
            self.stock -= 1
            return True
        else:
            return '菜没了'
    def add_dish(self,name,price):
        if  name not in self.dish and price <= 15:
            dish = Diancai(name,price)
            self.dish[name] = dish
            self.dish[price] = price
            print('添加成功')
        elif name in self.dish:
            print('已存在')
        elif price > 15:
            print('太贵了')
    def del_dish(self,name,price):
        if name in self.name:
           del self.dish[name,price]
           print(f"{name} 已下架。")
        else:
           print(f" {name} 不存在，无法下架。")
    def updata_dish(self,name,price):

        if self.name not in self.dish:
            print("不存在")
        else:
            self.dish[price] = self.price





#
#七、定义一个桌子类(办公桌)，包含长(长度)、宽(宽度)、高(高度)属性
#包含一个打印桌子信息属性的方法(展示信息)实例化2个桌子对象，为其赋予不同的属性值
#并调用展示信息方法，输出每个桌子的信息.
class Desk:
    def __init__(self,long,wide,high):
        self.long = long
        self.wide =  wide
        self.high = high
    def show_desk(self):
        print(f"桌子长: {self.long}cm,桌子宽: {self.wide}cm,桌子高: {self.high}cm")
#desk1 = Desk(100,100,100)
#desk2 = Desk(10,20,30)
#desk1.show_desk()
#desk2.show_desk()

# 八、定义一个用户类(用户)，用户名(用户名)和密码(密码)是这个类的属性。
class User():
    def  __init__(self,name,password):
        self.name = name
        self. password = password
user1 = User('admin','123456')
#print(user1.__dict__)

# 定义一个计算器类，有加减乘除四个方法
class Supuer_computer:
    def plus(self,a,b):
        return a+b
    def jian(self,a,b):
        return a-b
    def cheng(self,a,b):
        return a*b
    def chu(self,a,b):
        return a/b

# 十、创建一个名为Person的类，具有以下属性和方法：
# 属性：姓名(姓名)，年龄(年龄)  方法：greet()，打印出一句问候语，包括该人的姓名和年龄
class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def greet(self,):
        print(f'你好，我是{self.name},我{self.age}岁')
#person = Person('666','66')
#person.greet()

#十一、定义一个图书管理系统类，图书可以新增、修改、删除，要求新增的每个图书都加到txt文本里，数据持久化
#新增:图书名、作者名称、新建年月日
#修改:图书名、作者名称、新建年月日
#删除:图书删掉，且不在展示
#查看:全量查询，精确查询，需要用户传入形参来控制返回结果
import time
class Super_Book_Manager:
     def __init__(self,name,writer,times):
         self.name = name
         self.writer = writer
         self.times = times
         self.books = []
         self.books_path = 'books.txt'

def add_book(self,name,writer,times):
     book = Super_Book_Manager(name,writer,times)
     self.books.append(book)
         
    
# 十二、创建一个名为“汽车”的类，该类具有“品牌”和“颜色”属性。
# 创建一个“启动引擎”方法，该方法打印出“启动汽车引擎！”的消息.
'''   
class Car():
    def __init__(self,brand,color):
        self.brand = brand
        self.color = color
    def start(self):
        print('原神启动')
    def stop(self):
        print('停')
'''
#(1)可以添加商品，商家添加完的商品会存到商品列表
#1.1商品要有名称、sku、价格
#(2)可以修改商品信息:名称、sku、价格
#(3)可以对商品进行下架，下架后的商品不再展示
'''
class Product:
    def __init__(self, name, sku, price):
        self.name = name
        self.sku = sku
        self.price = price
class ProductManager:
    def __init__(self):
        self.products = []

    def add_product(self, name, sku, price):
        product = Product(name, sku, price)
        self.products.append(product)
        print(f"商品 {name} 添加成功！")

    def modify_product(self, name, new_name=None, sku=None, price=None):
        for product in self.products:
            if product.name == name:
                if new_name:
                    product.name = new_name
                if sku:
                    product.sku = sku
                if price:
                    product.price = price
                print(f"商品 {name} 修改成功！")
                return True
        print("未找到该商品，修改失败！")
        return False

    def delist_product(self, name):
        for product in self.products:
            if product.name == name:
                self.products.remove(product)
                print(f"商品 {name} 下架成功！")
                return True
        print("未找到该商品，下架失败！")
        return False
        '''
#十四、定义一个人类
#1.小明和小美都爱跑步
#2.小美体重45.0公斤
#3.小明体重75.0公斤
#4.每次跑步都会减少0.5公斤
#5.每次吃东西都会增加1公斤
'''
class People:
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight
    def run(self):
        self.weight -= 0.5
        return f'{self.name}跑一次步，体重变成{self.weight}KG'
    def eat(self):
        self.weight += 1
        return f'{self.name}吃一次东西，体重变成{self.weight}KG'
xiaomei = People('小美',45)
xiaoming = People('小明',75)
print(xiaomei.run())
print(xiaoming.eat())
'''
#士兵瑞恩有一把AK 47
#(士兵可以开火(开火扣动的是扳机)
#(枪能够发射子弹(把子弹打出去)
#抢能够装子弹-增加子弹数量
#要求没子弹，需要输出没有子弹了，且发射失败
'''
class AK():
    def __init__(self,bullet ):
        self.bullet = bullet
    def fire(self):
        if self.bullet >0:
            self.bullet -= 1
            print(f"开火！，还有{self.bullet}发子弹")
            return AK(self.bullet)

        else:
            print('没子弹了')
    def load(self):
        self.bullet += 30
        print("换弹！")
ranee = AK(0)
ranee.fire()
'''







